import java.io.PrintWriter;
import java.io.BufferedWriter;
import java.io.FileWriter;

/**
 * Clase Logger que nos permitir� hacer un seguimiento de datos de la ejecuci�n de la aplicaci�n
 * @author Juan Belmonte, Carmen Parra, Luis Rodriguez
 * @version 0.5.0
 */
public class Logger{
	static PrintWriter logWriter;
	static int level=0;
		
	/**
	 * Setter de los atributos de la clase Logger.
	 * @param logFile Arhivo log que queremos cargar, en forma de string
	 * @param l Nivel del log representado por un int. La jerarqu�a de niveles es: 0 = ERROR, 1 = WARNING, 2 = TRACE, 3 = VERBOSE TRACE
	 */
	public static void setLogFileAndLevel(String logFile, int l)
	{
		level=l;
		try {
        	logWriter = new PrintWriter (new BufferedWriter(new FileWriter(logFile)));
        } catch (Exception e) {
        	System.out.println("ERROR: Imposible abrir fichero de Log");
        	System.exit(-1);
        }
	}
	
	/**
	 * Escribe En el log el mensaje que le pasemos por par�metro.
	 * @param message Par�metro de tipo String que representa el mensaje que escribiremos en el log
	 */
	public static void log(String message)
	{
		logWriter.println(message);
		logWriter.flush();
	}
	
	/**
	 * M�todo que se invoca al hacer un log para decidir si es un log de tipo VERBOSE TRACE, seg�n el nivel de log que haya en ese momento
	 * @param message Mensaje en forma de String que escribiremos en el log
	 */
	public static void logVbTrace(String message)	//Log verbose Trace
	{
		if (level>2)
			log("VERBOSE TRACE:"+message);
	}
	/**
	 * M�todo que se invoca al hacer un log para decidir si es un log de tipo VERBOSE TRACE, seg�n el nivel de log que haya en ese momento
	 * @param message Mensaje en forma de String que escribiremos en el log
	 */
	public static void logTrace(String message)
	{
		if (level>1)
			log("TRACE:"+message);
	}
	/**
	 * M�todo que se invoca al hacer un log para decidir si es un log de tipo WARNING, seg�n el nivel de log que haya en ese momento
	 * @param message Mensaje en forma de String que escribiremos en el log
	 */
	public static void logWarning(String message)
	{
		if (level>0)
			log("WARNING:"+message);
	}
	/**
	 * M�todo que se invoca al hacer un log para decidir si es un log de tipo ERROR, seg�n el nivel de log que haya en ese momento
	 * @param message Mensaje en forma de String que escribiremos en el log
	 */
	public static void logError(String message)
	{
		log("ERROR:"+message);
	}

}
